package bin_tree.leetcode;

/**
 * 将二叉树转为字符串
 **/
public class Num606 {
    private StringBuilder sb = new StringBuilder();
    /**
     * 传入一颗以root为根的二叉树，就能按照前序遍历的方式将其转为字符串
     * @param root
     * @return
     */
    public String tree2str(TreeNode root) {
        if (root == null) {
            return "";
        }
        // 先访问根节点，此处的访问就是直接将结点值拼接到sb中即可
        // 根
        sb.append(root.val);
        // 再去处理左子树的情况
        if (root.left != null) {
            // 递归的去转换左子树
            sb.append("(");
            // 递归处理左子树
            tree2str(root.left);
            sb.append(")");
        }else {
            // 此时左树为空，判断右树是否为空，叶子结点也是不加()
            // 只有左空右不空才添加括号
            if (root.right != null) {
                sb.append("()");
            }
        }
        // 再去处理右子树
        if (root.right != null) {
            sb.append("(");
            tree2str(root.right);
            sb.append(")");
        }
        return sb.toString();
    }
}